﻿using System;
using System.Collections.Generic;
using System.Text;
using Business.Entities;
using System.Data;
using System.Data.SqlClient;

namespace Data.Database
{
    public class ComisionAdapter:Adapter
    {
        public List<Comision> GetAll()
        {
            List<Comision> comisiones = new List<Comision>();
            try
            {
                this.OpenConnection();
                SqlCommand cmdComisiones = new SqlCommand("select * from comisiones", SqlConn);
                SqlDataReader drComisiones = cmdComisiones.ExecuteReader();


                while (drComisiones.Read())
                {
                    Comision com = new Comision();
                    com.ID = (int)drComisiones["id_Comision"];
                    com.Descripcion = (string)drComisiones["desc_Comision"];
                    com.Anioespecialidad = (int)drComisiones["anio_especialidad"];
                    com.Idplan = (int)drComisiones["id_plan"];
                    comisiones.Add(com);

                }
                drComisiones.Close();
            }
            catch (Exception Ex)
            {
                Exception ExcepcionManejada =
                new Exception("Error al recuperar lista de Comisiones", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

            return comisiones;
        }

        public Business.Entities.Comision GetOne(int ID)
        {
            Comision com = new Comision();

            try
            {
                this.OpenConnection();
                SqlCommand cmdComisiones = new SqlCommand("select  * from comisiones where id_Comision = @id", SqlConn);
                cmdComisiones.Parameters.Add("@id", SqlDbType.Int).Value = ID;
                SqlDataReader drComisiones = cmdComisiones.ExecuteReader();
                if (drComisiones.Read())
                {
                    com.ID = (int)drComisiones["id_Comision"];
                    com.Descripcion = (string)drComisiones["desc_Comision"];
                    com.Anioespecialidad = (int)drComisiones["anio_especialidad"];
                    com.Idplan = (int)drComisiones["id_plan"];

                }
                drComisiones.Close();


            }
            catch (Exception Ex)
            {
                Exception ExcepcionManejada =
                new Exception("Error al recuperar datos de la Comision", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

            return com;
        }


        public void Delete(int ID)
        {

            try
            {
                this.OpenConnection();
                SqlCommand cmdDelete = new SqlCommand("delete from comisiones where id_Comision=@id", SqlConn);
                cmdDelete.Parameters.Add("@id", SqlDbType.Int).Value = ID;
                cmdDelete.ExecuteNonQuery();
            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al eliminar Comision", Ex);
                throw ExcepcionManejada;

            }

            finally
            {
                this.CloseConnection();
            }


        }


        protected void Update(Comision com)
        {
            

            try
            {
                this.OpenConnection();
                SqlCommand cmdSave = new SqlCommand(
                "UPDATE comisiones set desc_Comision=@desc_Comision, anio_especialidad=@anio_especialidad, id_plan=@id_plan WHERE id_Comision=@id", SqlConn);
                cmdSave.Parameters.Add("@id", SqlDbType.Int).Value = com.ID;
                cmdSave.Parameters.Add("@desc_Comision", SqlDbType.VarChar, 50).Value = com.Descripcion;
                cmdSave.Parameters.Add("@anio_especialidad", SqlDbType.Int).Value = com.Anioespecialidad;
                cmdSave.Parameters.Add("@id_plan", SqlDbType.Int).Value = com.Idplan;
                cmdSave.ExecuteNonQuery();
            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al modificar datos de la Comision", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

        }


        protected void Insert(Comision com)
        {
            try
            {
                this.OpenConnection();
                SqlCommand cmdSave = new SqlCommand(
                "insert into comisiones(desc_Comision,anio_especialidad,id_plan) values(@desc_Comision,@anio_especialidad,@id_plan) select @@identity", SqlConn);

                cmdSave.Parameters.Add("@desc_Comision", SqlDbType.VarChar, 50).Value = com.Descripcion;
                cmdSave.Parameters.Add("@anio_especialidad", SqlDbType.Int).Value = com.Anioespecialidad;
                cmdSave.Parameters.Add("@id_plan", SqlDbType.Int).Value = com.Idplan;
                com.ID = Decimal.ToInt32((decimal)cmdSave.ExecuteScalar());

            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al crear Comision", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

        }





        public void Save(Comision com)
        {
            if (com.State == BussinessEntity.States.Deleted)
            {
                this.Delete(com.ID);
            }
            else if (com.State == BussinessEntity.States.New)
            {
                this.Insert(com);
            }
            else if (com.State == BussinessEntity.States.Modified)
            {
                this.Update(com);
            }
            com.State = BussinessEntity.States.Unmodified;

        }
    }
}
